// 导入 dart:core 库，该库提供了 Dart 语言的核心功能
import 'dart:core';

void main() {
  // 知识点：列表 (List)
  // 创建一个整数列表，使用类型推断，Dart 会自动推断出 list 为 List<int> 类型
  var list = [1, 2, 3];
  print('列表内容: $list');
  print('列表长度: ${list.length}');
  print('列表第二个元素: ${list[1]}');

  // 修改列表中的元素
  list[1] = 10;
  print('修改后的列表内容: $list');

  // 创建一个编译时常量列表
  var constantList = const [4, 5, 6];
  // constantList[1] = 20; // 这行会报错，因为常量列表不可修改

  // 知识点：集合 (Set)
  // 创建一个字符串集合，使用类型推断，Dart 会自动推断出 set 为 Set<String> 类型
  var set = {'apple', 'banana', 'cherry'};
  print('集合内容: $set');
  print('集合长度: ${set.length}');

  // 向集合中添加元素
  set.add('date');
  print('添加元素后的集合内容: $set');

  // 创建一个编译时常量集合
  var constantSet = const {'elephant', 'fox', 'giraffe'};
  // constantSet.add('horse'); // 这行会报错，因为常量集合不可修改

  // 知识点：映射 (Map)
  // 创建一个字符串到整数的映射，使用类型推断，Dart 会自动推断出 map 为 Map<String, int> 类型
  var map = {
    'one': 1,
    'two': 2,
    'three': 3,
  };
  print('映射内容: $map');
  print('映射中键为 \'two\' 的值: ${map['two']}');

  // 向映射中添加键值对
  map['four'] = 4;
  print('添加键值对后的映射内容: $map');

  // 创建一个编译时常量映射
  var constantMap = const {
    'five': 5,
    'six': 6,
    'seven': 7,
  };
  // constantMap['eight'] = 8; // 这行会报错，因为常量映射不可修改

  // 知识点：泛型 (Generics)
  // 创建一个泛型函数，用于返回列表的第一个元素
  T first<T>(List<T> ts) {
    return ts[0];
  }

  var numbers = [11, 12, 13];
  var firstNumber = first(numbers);
  print('列表的第一个元素: $firstNumber');

  // 知识点：记录 (Records)
  // 定义一个函数，返回包含姓名和年龄的记录
  (String name, int age) getUserInfo() {
    return ('Bob', 30);
  }

  // 使用模式匹配解构记录
  var (name, age) = getUserInfo();
  print('姓名: $name');
  print('年龄: $age');
}    